package com.uubx.controller;


import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.uubx.exception.CustomerException;
import com.uubx.pojo.Information;
import com.uubx.pojo.Protocols;
import com.uubx.result.MessageCode;
import com.uubx.result.Result;
import com.uubx.result.ResultUtils;
import com.uubx.service.ProtocolsService;
import com.uubx.vo.BatchVo;
import com.uubx.vo.ProtocolsVo;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Controller
@ResponseBody
@Api(description = "关于我们相关的接口")
@RequestMapping("/protocols")
public class ProtocolsController {


 @Autowired

private ProtocolsService protocolsService;

    /**
     * 添加协议信息
     * @param
     * @param
     * @return
     */
    @RequestMapping(value = "/add",method = RequestMethod.POST)
    @ApiOperation(value = "添加协议信息",notes = "添加协议信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result saveProtocols(@RequestBody Protocols protocols){
        protocolsService.saveProtocols(protocols);
        return ResultUtils.buildSuccess();
    }

    /**
     * 删除协议信息
     * @param
     * @param
     * @return
     */
    @RequestMapping(value = "/deleteById",method = RequestMethod.POST)
    @ApiOperation(value = "删除协议信息",notes = "删除协议信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result deleteProtocolsById(@RequestBody Long id){
        protocolsService.deleteProtocolsById(id);
        return ResultUtils.buildSuccess();
    }

    /**
     * 通过协议信息的Id查询
     * @param id
     * @return
     */
    @RequestMapping(value = "/queryById",method = RequestMethod.POST)
    @ApiOperation(value = "通过协议信息的Id查询",notes = "通过协议信息的Id查询",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result queryProtocolsById(@RequestParam(value = "id")Long id){
        Protocols protocols = protocolsService.queryProtocolsById(id);
        return ResultUtils.buildSuccess(protocols);
    }


    /**
     * 编辑协议信息
     * @param
     * @param
     * @return
     */
    @RequestMapping(value = "/update",method = RequestMethod.POST)
    @ApiOperation(value = "编辑协议信息",notes = "编辑协议信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result updateProtocols(@RequestBody Protocols protocols){
        protocolsService.updateProtocols(protocols);
        return ResultUtils.buildSuccess();
    }

    /**
     *分页查询所有的协议信息
     * @param protocolsVo
     * @return
     * @throws CustomerException
     */
    @RequestMapping(value = "/query",method = RequestMethod.POST )
    @ApiOperation(value = "分页查询所有的协议信息",notes = "分页查询所有的协议信息",httpMethod = "POST"
    )
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    })
    public Result queryAllProtocols(@RequestBody ProtocolsVo protocolsVo)throws CustomerException{

        PageHelper.startPage(protocolsVo.getPageNum(),protocolsVo.getPageSize());
        //List<Map> mapList = protocolsService.queryAllProtocols(protocolsVo);
         PageInfo<Map> pageInfo = new PageInfo<>(protocolsService.queryAllProtocols(protocolsVo));
        if (pageInfo.getList().isEmpty()){
            throw new CustomerException(MessageCode.INSURANCE_EMPTY);
        }
        return ResultUtils.buildSuccess(pageInfo);

    }

    /**
     * 批量删除资讯协议信息
     * @param batchVo
     * @return
     */
    @RequestMapping(value = "/batchDelete",method = RequestMethod.POST)
    @ApiOperation(value = "批量删除协议信息",notes = "批量删除协议信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    }
    )
    public Result BatchDeleteProtocols(@RequestBody BatchVo batchVo){
        if(batchVo.getIds()!=null){
            protocolsService.BatchDeleteProtocols(batchVo);
        }
        return ResultUtils.buildSuccess();
    }
    /**
     * 批量新增协议信息
     * @param batchVo
     * @return
     */
    @RequestMapping(value = "/batchInsert",method = RequestMethod.POST)
    @ApiOperation(value = "批量新增资讯信息",notes = "批量新增资讯信息",httpMethod = "POST")
    @ApiResponses({
            @ApiResponse(code=200,message="请求成功! data代表返回的数据"),
            @ApiResponse(code=500,message="后台逻辑错误!"),
            @ApiResponse(code=404,message="找不到页面!"),
            @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get!"),
            @ApiResponse(code=406,message="页面地址和接口名冲突!"),
            @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串!")
    }
    )
    public Result BatchInsertProtocols(@RequestBody BatchVo batchVo){

          if (batchVo!=null){
            //!不做转换操作会报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX。
            //将接收的前端LinkedHashMap集合转换为JSON数据
            String jsonString2 = JSON.toJSONString(batchVo.getProtocols());
            //将转换后的JOSN数据转换为可操作性List结合
            List<Protocols> list = JSON.parseArray(jsonString2, Protocols.class);
            for (int i=0;i<list.size();i++){
                if (list.get(i).equals("1")){
                    list.get(i).setPuttime(new Date());
                }else if(list.get(i).getStatus().equals("2")){
                    list.get(i).setRemovetime(new Date());
                }
                list.get(i).setLasttime(new Date());
                protocolsService.saveProtocols(list.get(i));
            }
        }
        return ResultUtils.buildSuccess();
    }

}
